home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / util / misc / ReportPlus.lha / reportplus / source / f11.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-06-25  |  12.5 KB  |  439 lines

  1. #include <exec/types.h>
  2. #include <proto/exec.h>
  3. #include <intuition/intuition.h>
  4. #include <intuition/gadgetclass.h>
  5. #include <proto/intuition.h>
  6. #include <libraries/gadtools.h>
  7. #include <proto/gadtools.h>
  8.  
  9. #define ALL_REACTION_CLASSES
  10. #define ALL_REACTION_MACROS
  11. #include <reaction/reaction.h>
  12. #include <gadgets/texteditor.h>
  13. #include <clib/texteditor_protos.h>
  14. #include <pragmas/texteditor_pragmas.h>
  15.  
  16. #include <ctype.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include "rp.h"
  20.  
  21. IMPORT  struct AminetStruct aminet;
  22. AGLOBAL struct AGDBStruct   agdb;
  23.  
  24. #define GID_11_TE1 0
  25. #define GIDS_11    GID_11_TE1
  26.  
  27. // from rp.c
  28. IMPORT SBYTE                page;
  29. IMPORT struct NewGadget     Gadget;
  30. IMPORT struct Gadget       *BU99_Right,
  31.                            *BU99_TextEditor,
  32.                            *PrevGadPtr;
  33. IMPORT struct Window*       MainWindowPtr;
  34. IMPORT struct SharedStruct  shared;
  35. IMPORT ULONG                offset;
  36. IMPORT TEXT                 IOBuffer[LONGESTFIELD + 1],
  37.                             aslresult[MEDFIELD + 1],
  38.                             string[VLONGFIELD + 1];
  39. IMPORT ABOOL                fillwindows, react;
  40. IMPORT struct Library*      TextEditorBase;
  41.  
  42. MODULE void updateagdbgadgets(void);
  43. MODULE void readagdbgadgets(void);
  44.  
  45. MODULE struct Gadget *ST111_Title             = NULL,
  46.                      *ST111_Publisher         = NULL,
  47.                      *ST111_GameType          = NULL,
  48.                      *ST111_Players           = NULL,
  49.                      *ST111_HDInstallable     = NULL,
  50.                      *ST111_Compatibility     = NULL,
  51.                      *ST111_Submission        = NULL,
  52.                      *TE111_Review            = NULL,
  53.                      *gadgets[GIDS_11 + 1];
  54.  
  55. AGLOBAL void agdb1(void)
  56. {   verynewwindow
  57.     (   AGDBWIDTH, AGDBHEIGHT,
  58.         "Report+: Amiga Games Database (AGDB) Review Details",
  59.         BUTTONIDCMP | STRINGIDCMP
  60.     );
  61.     OnMenu(MainWindowPtr, FULLMENUNUM(MN_PROJECT, IN_NEW,    NOSUB));
  62.     OnMenu(MainWindowPtr, FULLMENUNUM(MN_PROJECT, IN_OPEN,   NOSUB));
  63.     OnMenu(MainWindowPtr, FULLMENUNUM(MN_PROJECT, IN_SAVE,   NOSUB));
  64.     OnMenu(MainWindowPtr, FULLMENUNUM(MN_PROJECT, IN_SAVEAS, NOSUB));
  65.  
  66.     /* PAGE 111 ************************************************************/
  67.  
  68. if (react)
  69. {   if (!(gadgets[GID_11_TE1] = (struct Gadget *) NewObject(
  70.         TEXTEDITOR_GetClass(),    NULL,
  71.         GA_ID,                    GID_11_TE1,
  72.         GA_Left,                   10,
  73.         GA_Top,                   130,
  74.         GA_Width,                 AGDBWIDTH - 20,
  75.         GA_Height,                100,
  76.         GA_RelVerify,             TRUE,
  77.         GA_TEXTEDITOR_ExportWrap,  75,
  78.         TAG_END
  79.     )))
  80.     {   rq("Can't create ReAction gadgets!");
  81.     }
  82.     SetGadgetAttrs
  83.     (   gadgets[GID_11_TE1],    MainWindowPtr, NULL,
  84.         GA_TEXTEDITOR_Contents, aminet.textfield
  85.     ); // long description
  86.  
  87.     AddGList(MainWindowPtr, gadgets[GID_11_TE1], -1, -1, NULL);
  88.     RefreshGList(gadgets[GID_11_TE1], MainWindowPtr, NULL, -1);
  89.  
  90.     setgadget(10, 130, AGDBWIDTH - 20, 1, "Review:", PLACETEXT_ABOVE);
  91.     TE111_Review = PrevGadPtr = (struct Gadget *) CreateGadget
  92.     (   TEXT_KIND,
  93.         PrevGadPtr,
  94.         &Gadget,
  95.         TAG_DONE
  96.     );
  97. } else
  98. {   setgadget(60, 130, AGDBWIDTH - 120, 12, "Review...", NULL);
  99.     BU99_TextEditor = PrevGadPtr = (struct Gadget *) CreateGadget
  100.     (   BUTTON_KIND,
  101.         PrevGadPtr,
  102.         &Gadget,
  103.         GT_Underscore, '_',
  104.         TAG_DONE
  105.     );
  106. }
  107.  
  108.     setgadget(168, 24, 330, 12, "_Title:", NULL);
  109.     ST111_Title = PrevGadPtr = (struct Gadget *) CreateGadget
  110.     (   STRING_KIND,
  111.         PrevGadPtr,
  112.         &Gadget,
  113.         GTST_String,   &(agdb.title),
  114.         GTST_MaxChars, 40,
  115.         GA_TabCycle,   TRUE,
  116.         GA_Immediate,  TRUE,
  117.         GT_Underscore, '_',
  118.         TAG_DONE
  119.     );
  120.  
  121.     setgadget(168, 36, 330, 12, "_Publisher (Year):", NULL);
  122.     ST111_Publisher = PrevGadPtr = (struct Gadget *) CreateGadget
  123.     (   STRING_KIND,
  124.         PrevGadPtr,
  125.         &Gadget,
  126.         GTST_String, &(agdb.publisher),
  127.         GTST_MaxChars, 40,
  128.         GA_TabCycle, TRUE,
  129.         GA_Immediate, TRUE,
  130.         GT_Underscore, '_',
  131.         TAG_DONE
  132.     );
  133.  
  134.     setgadget(168, 48, 330, 12, "_Game Type:", NULL);
  135.     ST111_GameType = PrevGadPtr = (struct Gadget *) CreateGadget
  136.     (   STRING_KIND,
  137.         PrevGadPtr,
  138.         &Gadget,
  139.         GTST_String, &(agdb.gametype),
  140.         GTST_MaxChars, 40,
  141.         GA_TabCycle, TRUE,
  142.         GA_Immediate, TRUE,
  143.         GT_Underscore, '_',
  144.         TAG_DONE
  145.     );
  146.  
  147.     setgadget(168, 60, 330, 12, "P_layers:", NULL);
  148.     ST111_Players = PrevGadPtr = (struct Gadget *) CreateGadget
  149.     (   STRING_KIND,
  150.     PrevGadPtr,
  151.     &Gadget,
  152.         GTST_String, &(agdb.players),
  153.     GTST_MaxChars, 40,
  154.     GA_TabCycle, TRUE,
  155.     GA_Immediate, TRUE,
  156.         GT_Underscore, '_',
  157.     TAG_DONE
  158.     );
  159.  
  160.     setgadget(168, 72, 330, 12, "_HD Installable?", NULL);
  161.     ST111_HDInstallable = PrevGadPtr = (struct Gadget *) CreateGadget
  162.     (   STRING_KIND,
  163.     PrevGadPtr,
  164.     &Gadget,
  165.         GTST_String, &(agdb.hdinstallable),
  166.     GTST_MaxChars, 40,
  167.     GA_TabCycle, TRUE,
  168.     GA_Immediate, TRUE,
  169.         GT_Underscore, '_',
  170.     TAG_DONE
  171.     );
  172.  
  173.     setgadget(168, 84, 330, 12, "_Compatibility:", NULL);
  174.     ST111_Compatibility = PrevGadPtr = (struct Gadget *) CreateGadget
  175.     (    STRING_KIND,
  176.     PrevGadPtr,
  177.     &Gadget,
  178.         GTST_String, &(agdb.compatibility),
  179.     GTST_MaxChars, 40,
  180.     GA_TabCycle, TRUE,
  181.     GA_Immediate, TRUE,
  182.         GT_Underscore, '_',
  183.     TAG_DONE
  184.     );
  185.  
  186.     if ((!(aminet.uploader[0])) && readin("S:Report.sender"))
  187.     {   /* # Refer: <last>,<first> (<company> ,phone <phone>)<LF>
  188.            # Path: <email><LF>
  189.            # ReferID: <developer><LF> */
  190.  
  191.         offset = 0;
  192.         parse("# Refer: ");
  193.         parse(",");
  194.         parse(" (");
  195.         parse(" ,phone ");
  196.         parse(")\n# Path: ");
  197.         parse("\n# ReferID: ");
  198.         strcpy(aminet.uploader, string);
  199.     }
  200.  
  201.     setgadget(168, 96, 330, 12, "_Submission:", NULL);
  202.     ST111_Submission = PrevGadPtr = (struct Gadget *) CreateGadget
  203.     (   STRING_KIND,
  204.         PrevGadPtr,
  205.         &Gadget,
  206.         GTST_String, &(aminet.uploader),
  207.         GTST_MaxChars, 40,
  208.         GA_TabCycle, TRUE,
  209.         GA_Immediate, TRUE,
  210.         GT_Underscore, '_',
  211.         TAG_DONE
  212.     );
  213.  
  214.     drawgadgets((UWORD) ~0);
  215.     ActivateGadget(ST111_Title, MainWindowPtr, NULL);
  216.     loop();
  217.     readagdbgadgets();
  218.     closewindow();
  219. }
  220.  
  221. AGLOBAL void saveagdb(ABOOL saveas)
  222. {   /*  Title            <title>
  223.         Publisher        <publisher>
  224.         Game Type        <game type>
  225.         Players          <players>
  226.         HD Installable   <hd installable>
  227.         Compatibility    <compatibility>
  228.         Submission       <uploader>
  229.         
  230.         Review
  231.         <review> */
  232.  
  233.     readagdbgadgets();
  234.  
  235.     strcpy(IOBuffer, "Title:           ");
  236.     strcat(IOBuffer, agdb.title);
  237.     strcat(IOBuffer, "\nPublisher:       ");
  238.     strcat(IOBuffer, agdb.publisher);
  239.     strcat(IOBuffer, "\nGame Type:       ");
  240.     strcat(IOBuffer, agdb.gametype);
  241.     strcat(IOBuffer, "\nPlayers:         ");
  242.     strcat(IOBuffer, agdb.players);
  243.     strcat(IOBuffer, "\nHD Installable:  ");
  244.     strcat(IOBuffer, agdb.hdinstallable);
  245.     strcat(IOBuffer, "\nCompatibility:   ");
  246.     strcat(IOBuffer, agdb.compatibility);
  247.     strcat(IOBuffer, "\nSubmission:      ");
  248.     strcat(IOBuffer, aminet.uploader);
  249.     strcat(IOBuffer, "\n\nReview:\n");
  250.     strcat(IOBuffer, agdb.textfield);
  251.  
  252.     if (!agdb.output[0] || saveas) // if we need a filename
  253.     {   if (saveasl("Save AGDB Review"))
  254.         {   strcpy(agdb.output, aslresult);
  255.             writeout(agdb.output);
  256. }   }   }
  257.  
  258. AGLOBAL void agdb_loop(ULONG class, struct Gadget* addr, UWORD code)
  259. {       if (class == IDCMP_GADGETUP)
  260.         {   if (addr == BU99_Right)
  261.             {   page = 0;
  262.             } elif (addr == BU99_TextEditor)
  263.             {   if (!react)
  264.                 {   saveagdb(FALSE);
  265.                 }
  266.                 launcheditor(agdb.output);
  267.         }   }
  268.         elif (class == IDCMP_VANILLAKEY)
  269.         {   code = toupper(code);
  270.             if (code == ESCAPE)
  271.             {   page = 0;
  272.             } elif (code == 'T')
  273.             {   ActivateGadget(ST111_Title,         MainWindowPtr, NULL);
  274.             } elif (code == 'P')
  275.             {   ActivateGadget(ST111_Publisher,     MainWindowPtr, NULL);
  276.             } elif (code == 'G')
  277.             {   ActivateGadget(ST111_GameType,      MainWindowPtr, NULL);
  278.             } elif (code == 'L')
  279.             {   ActivateGadget(ST111_Players,       MainWindowPtr, NULL);
  280.             } elif (code == 'H')
  281.             {   ActivateGadget(ST111_HDInstallable, MainWindowPtr, NULL);
  282.             } elif (code == 'C')
  283.             {   ActivateGadget(ST111_Compatibility, MainWindowPtr, NULL);
  284.             } elif (code == 'S')
  285.             {   ActivateGadget(ST111_Submission,    MainWindowPtr, NULL);
  286.             } elif (code == 'R')
  287.             {   if (!react)
  288.                 {   saveagdb(FALSE);
  289.                 }
  290.                 launcheditor(agdb.output);
  291. }       }   }
  292.  
  293. AGLOBAL void newagdb(ABOOL display)
  294. {   strcpy(agdb.title,         "");
  295.     strcpy(agdb.publisher,     "");
  296.     strcpy(agdb.gametype,      "");
  297.     strcpy(agdb.players,       "");
  298.     strcpy(agdb.hdinstallable, "");
  299.     strcpy(agdb.compatibility, "");
  300.     strcpy(aminet.uploader,    "");
  301.     strcpy(agdb.output,        "");
  302.     strcpy(agdb.textfield,     "");
  303.     agdb.loaded = FALSE;
  304.  
  305.     if (display)
  306.         updateagdbgadgets();
  307. }
  308.  
  309. AGLOBAL void openagdb(void)
  310. {   if (asl())
  311.     {   loadagdb();
  312.         updateagdbgadgets();
  313. }   }
  314.  
  315. AGLOBAL void loadagdb(void)
  316. {   if (readin(aslresult))
  317.     {   strcpy(agdb.output, aslresult);
  318.         agdb.loaded = TRUE;
  319.         offset = 0;
  320.  
  321.         parse("Title:           ");
  322.         parse("\nPublisher:       ");
  323.         strcpy(agdb.title,         string);
  324.         parse("\nGame Type:       ");
  325.         strcpy(agdb.publisher,     string);
  326.         parse("\nPlayers:         ");
  327.         strcpy(agdb.gametype,      string);
  328.         parse("\nHD Installable:  ");
  329.         strcpy(agdb.players,       string);
  330.         parse("\nCompatibility:   ");
  331.         strcpy(agdb.hdinstallable, string);
  332.         parse("\nSubmission:      ");
  333.         strcpy(agdb.compatibility, string);
  334.         parse("\n\nReview:\n");
  335.         strcpy(aminet.uploader,    string);
  336.         parsetoend();
  337.         strcpy(agdb.textfield,     string);
  338.  
  339.         updateagdbgadgets();
  340. }   }
  341.  
  342. MODULE void updateagdbgadgets(void)
  343. {   GT_SetGadgetAttrs
  344.     (   ST111_Title,
  345.         MainWindowPtr,
  346.         NULL,
  347.         GTST_String, agdb.title,
  348.         TAG_DONE
  349.     );
  350.     GT_SetGadgetAttrs
  351.     (   ST111_Publisher,
  352.         MainWindowPtr,
  353.         NULL,
  354.         GTST_String, agdb.publisher,
  355.         TAG_DONE
  356.     );
  357.     GT_SetGadgetAttrs
  358.     (   ST111_GameType,
  359.         MainWindowPtr,
  360.         NULL,
  361.         GTST_String, agdb.gametype,
  362.         TAG_DONE
  363.     );
  364.     GT_SetGadgetAttrs
  365.     (   ST111_Players,
  366.         MainWindowPtr,
  367.         NULL,
  368.         GTST_String, agdb.players,
  369.         TAG_DONE
  370.     );
  371.     GT_SetGadgetAttrs
  372.     (   ST111_HDInstallable,
  373.         MainWindowPtr,
  374.         NULL,
  375.         GTST_String, agdb.hdinstallable,
  376.         TAG_DONE
  377.     );
  378.     GT_SetGadgetAttrs
  379.     (   ST111_Compatibility,
  380.         MainWindowPtr,
  381.         NULL,
  382.         GTST_String, agdb.compatibility,
  383.         TAG_DONE
  384.     );
  385.     GT_SetGadgetAttrs
  386.     (   ST111_Submission,
  387.         MainWindowPtr,
  388.         NULL,
  389.         GTST_String, aminet.uploader,
  390.         TAG_DONE
  391.     );
  392.  
  393.     if (react)
  394.     {   SetGadgetAttrs
  395.         (   gadgets[GID_11_TE1], MainWindowPtr, NULL,
  396.             GA_TEXTEDITOR_Contents, aminet.textfield,
  397.             TAG_DONE
  398.         );
  399. }   }
  400.  
  401. MODULE void readagdbgadgets(void)
  402. {   STRPTR textBuffer;
  403.  
  404.     strcpy
  405.     (   agdb.title,
  406.         ((struct StringInfo *) ST111_Title->SpecialInfo)->Buffer
  407.     );
  408.     strcpy
  409.     (   agdb.publisher,
  410.         ((struct StringInfo *) ST111_Publisher->SpecialInfo)->Buffer
  411.     );
  412.     strcpy
  413.     (   agdb.gametype,
  414.         ((struct StringInfo *) ST111_GameType->SpecialInfo)->Buffer
  415.     );
  416.     strcpy
  417.     (   agdb.players,
  418.         ((struct StringInfo *) ST111_Players->SpecialInfo)->Buffer
  419.     );
  420.     strcpy
  421.     (   agdb.hdinstallable,
  422.         ((struct StringInfo *) ST111_HDInstallable->SpecialInfo)->Buffer
  423.     );
  424.     strcpy
  425.     (   agdb.compatibility,
  426.         ((struct StringInfo *) ST111_Compatibility->SpecialInfo)->Buffer
  427.     );
  428.     strcpy
  429.     (   aminet.uploader,
  430.         ((struct StringInfo *) ST111_Submission->SpecialInfo)->Buffer
  431.     );
  432.  
  433.     if (react)
  434.     {   textBuffer = (STRPTR) DoGadgetMethod(gadgets[GID_11_TE1], MainWindowPtr, NULL, GM_TEXTEDITOR_ExportText, NULL);
  435.         strcpy(agdb.textfield, textBuffer); // long description
  436.         FreeVec((APTR) textBuffer);
  437.         // textBuffer = NULL;
  438. }   }
  439.